//
//  WLTableViewDelegate.h
//  列表视图代理封装
//
//  Created by shushui on 2018/8/16.
//  Copyright © 2018年 shushui. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "WLBaseTableViewLayerModel.h"
#import "WLBaseTableViewCell.h"
#import "UIScrollView+WLEmptyDataSet.h"


@protocol WLTableDelegate <NSObject>

@required
//cell创建
-(UITableViewCell *)wl_tableView:(UITableView *)tableView
                   layerModel:(WLBaseTableViewLayerModel *)layerModel
        cellForRowAtIndexPath:(NSIndexPath *)indexPath;
@optional
/** 头试图返回 */
- (UIView *)wl_tableView:(UITableView *)tableView layerModel:(WLBaseTableViewLayerSection *)layerModel viewForHeaderInSection:(NSInteger)section;
/** 脚试图返回 */
- (UIView *)wl_tableView:(UITableView *)tableView layerModel:(WLBaseTableViewLayerSection *)layerModel viewForFooterInSection:(NSInteger)section;
/** cell创建完成后返回 */
- (void)wl_tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
/** 在删除cell之后调用，停止显示cell的时候调用,界面不显示cell时。 */
- (void)wl_tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath;


// 结束拖拽时触发
- (void)wl_scrollViewDidEndDragging:(UIScrollView *)scrollView  willDecelerate:(BOOL)decelerate;
- (void)wl_tableView:(UITableView *)tableView rowData:(WLBaseTableViewLayerRow *)rowData didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

//返回索引数组
- (NSArray *)wl_sectionIndexTitlesForTableView:(UITableView *)tableView model:(WLBaseTableViewLayerModel *)model;
//响应点击索引时的委托方法    `此方法不写无影响`
- (NSInteger)wl_tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;


#pragma mark --缺省页
// 自定义显示视图
- (UIView *)wl_customViewForWLEmptyDataSet;
@end

@interface WLTableViewDelegate : NSObject <UITableViewDelegate,UITableViewDataSource,WLEmptyDataSetSource, WLEmptyDataSetDelegate>
@property(nonatomic,weak) id<WLTableDelegate> delegate;

- (instancetype)initWithDelegate:(id)delegate;

@property(nonatomic,strong) WLBaseTableViewLayerModel *viewModel;
/** 是否开启选中状态 */
@property(nonatomic,assign) BOOL deselectRow;
/** cell需要绑定代理的对象 */
@property(nonatomic,strong) id delegateTie;
@end
